//
// Created by sgyt on 2020/3/4.
// 获取未决信号集

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
    sigset_t newmask,oldmask,pendset;

    sigemptyset(&newmask);
    sigemptyset(&oldmask);
    sigemptyset(&pendset);

    //加入阻塞信号
    sigaddset(&newmask,SIGQUIT);
    sigaddset(&newmask,SIGINT);
    sigaddset(&newmask,SIGSTOP);
    sigprocmask(SIG_BLOCK,&newmask,&oldmask);

    //打印未决的信号，打印10唤醒这些信号
    int i = 0,j=0;
    while(1)
    {
        sigpending(&pendset);
        for(i = 1;i<31;i++)
        {
            if(sigismember(&pendset,i))
            {
                printf("1");
            }else{
                printf("0");
            }
        }
        printf("\n");

        if(j++%10 == 0)
        {
            //复位信号集
            sigprocmask(SIG_SETMASK,&oldmask,NULL);
        }else{
            sigprocmask(SIG_BLOCK,&newmask,NULL);
        }
        sleep(1);
    }
    return 0;
}

